home *** CD-ROM | disk | FTP | other *** search
/ Internet.Works 39 / Issue 39.iso / pc / PCSoftware / Internet Charactor Animator / intchaan.exe / %MAINDIR% / MovingScripts.txt < prev    next >
Encoding:
Text File  |  2000-09-27  |  16.8 KB  |  736 lines

  1. #Additional text which needs to be included during Publish
  2.  
  3. #AVATAR PROTO FIELDS
  4. #begin_text
  5. # version 009
  6.     eventIn SFVec3f destination_point
  7.     eventOut SFTime point_reached
  8.     eventIn SFVec3f set_translation
  9.     eventIn SFRotation set_rotation
  10.     eventOut SFTime animation_finished
  11.     eventOut SFTime animation_started
  12. #end_text
  13.  
  14. #MASTERSCRIPT AND MOVERSCRIPT
  15. #begin_text
  16. PROTO STUB_SITE [ 
  17.     exposedField SFNode site NULL
  18. ]
  19. { Group {} }
  20.  
  21. DEF stub_site STUB_SITE {
  22.     site IS _object_site_
  23. }
  24.  
  25. DEF MasterScript Script{
  26.     directOutput TRUE
  27.     field SFNode p USE stub_site
  28.     eventIn SFVec3f set_translation
  29.     eventIn SFRotation set_rotation
  30.     eventIn SFTime cycleTime
  31.     eventOut SFVec3f translation_changed
  32.     eventOut SFRotation rotation_changed
  33.     field SFVec3f shift_translation 0 0 0
  34.     field SFRotation shift_rotation 0 0 1 0
  35.     field SFVec3f prev_value_translation 0 0 0
  36.     field SFRotation prev_value_rotation 0 0 1 0
  37.     field SFBool bCycleTimeTranslation TRUE
  38.     field SFBool bCycleTimeRotation TRUE
  39.     field SFBool bChanged FALSE
  40.     field SFBool bChangedShift FALSE
  41.     
  42.     eventIn SFVec3f on_translation IS set_translation
  43.     eventIn SFRotation on_rotation IS set_rotation
  44.  
  45.     url "javascript:
  46.     function initialize(){
  47.         var site = p.site;
  48.         if (site!=null && site.toString()!='0' && site.toString()!='NULL')
  49.         {
  50.             translation_changed = site.translation;
  51.             rotation_changed = site.rotation;
  52.         }
  53.     }
  54.     function getMatrix(tr,rot){
  55.         matr = new VrmlMatrix();
  56.         matr.setTransform (    tr,    rot    );
  57.         return matr;
  58.     }
  59.     function update(){
  60.         if(bChangedShift)
  61.         {
  62.             curr_matrix = getMatrix(translation_changed,rotation_changed).multLeft(getMatrix(shift_translation,shift_rotation));
  63.             shift_translation = new SFVec3f();
  64.             shift_rotation = new SFRotation();
  65.             bChangedShift=false;
  66.             curr_matrix.getTransform(translation_changed,rotation_changed);
  67.         }
  68.         var site=p.site;
  69.         if (site!=null)
  70.         {
  71.             site.translation = translation_changed;
  72.             site.rotation = rotation_changed;
  73.         }
  74.     }
  75.     function cycleTime(value,timestamp){
  76.         bCycleTimeTranslation = true;
  77.         bCycleTimeRotation = true;
  78.     }
  79.     function on_translation(value,timestamp)
  80.     {
  81.         bChanged = true;
  82.         translation_changed = value;
  83.     }
  84.     function on_rotation(value,timestamp)
  85.     {
  86.         bChanged = true;
  87.         rotation_changed = value;
  88.     }    
  89.     function set_translation(value,timestamp)
  90.     {
  91.         bChangedShift = true;
  92.         bChanged = true;
  93.         if (bCycleTimeTranslation)
  94.         {
  95.             prev_value_translation = value;
  96.             bCycleTimeTranslation = false;
  97.         }
  98.         else
  99.         {
  100.             shift_translation = value.subtract(prev_value_translation);
  101.             prev_value_translation = value;
  102.         }
  103.     }
  104.     function set_rotation(value,timestamp)
  105.     {
  106.         bChangedShift = true;
  107.         bChanged = true;
  108.         if (bCycleTimeRotation)
  109.         {
  110.             prev_value_rotation = value;
  111.             bCycleTimeRotation = false;
  112.         }
  113.         else
  114.         {
  115.             value_matrix = getMatrix(new SFVec3f(),value);
  116.             prev_value_matrix = getMatrix(new SFVec3f(),prev_value_rotation);
  117.             shift_matrix = prev_value_matrix.inverse().multLeft(value_matrix);
  118.             shift_matrix.getTransform(new SFVec3f(),shift_rotation);
  119.  
  120.             prev_value_rotation = value;
  121.         }
  122.     }
  123.     function eventsProcessed()
  124.     {    
  125.         if (bChanged)
  126.         {
  127.             update();
  128.             bChanged = false;
  129.         }
  130.     }
  131.     "
  132. }
  133.  
  134. DEF MoveScript Script 
  135. {
  136.     url "javascript:
  137.     function initialize()
  138.     {
  139.         Browser.addRoute(timer,'time',self,'animate');
  140.     }
  141.     function set_distance(value)
  142.     {
  143.         anim_dist = value;
  144.     }
  145.     function set_animTimer(value)
  146.     {
  147.         if (!timer.enabled || bMove)
  148.         anim_timer = value;
  149.     }
  150.  
  151.     function atan2(y,x)
  152.     {
  153.         if (x==0)
  154.         {
  155.             if (y==0) return 0;
  156.             else return (y>0) ? Math.PI : -Math.PI;
  157.         }
  158.         else
  159.         {
  160.             r = Math.atan(y/x);
  161.             if (x<0) r = r + ((y>0) ? Math.PI : -Math.PI);
  162.             return r;
  163.         }
  164.     }
  165.  
  166.     function getAzimuth( center, to )
  167.     {
  168.         diff = to.subtract(center);
  169.         return Math.atan2(diff.x, diff.z);
  170.     } 
  171.  
  172.  
  173.     function animate(value)
  174.     {
  175.         pos = getPos();
  176.         diff = target.subtract(pos);
  177.         diff.y=0;
  178.         dist = diff.length();
  179.         if (dist>0.001)
  180.         {
  181.             shift = pos.subtract(prev_pos).length();
  182.             pos.y = pos.y + (target.y - pos.y) * shift / dist;
  183.         }
  184.         if( isNaN(prev_time) || prev_time == 0 )
  185.         prev_time = prev_time;
  186.         dur = value - prev_time;
  187.         if (bMove)
  188.         {
  189.             if((target.y-pos.y)!=0)
  190.             MasterScript.on_translation = pos;
  191.             if (dist<anim_dist/2)
  192.             stopIt(value);
  193.             else
  194.             rotate(pos,dur);
  195.         }
  196.         else
  197.         {
  198.             startTime = anim_timer.startTime;
  199.             stopTime  = timerStopTime;
  200.             timeTime = value;
  201.             if (startTime<stopTime)
  202.             {
  203.                 if (timeTime>=stopTime)
  204.                 {
  205.                     timer.enabled = false;
  206.                     bStopInProgress = false;
  207.                     MasterScript.on_translation = target;
  208.                 }
  209.                 else
  210.                 {
  211.                     coeff = (timeTime-stopped)/(stopTime-stopped);
  212.                     if (coeff>1) coeff = 1;
  213.                     diff = diff.multiply(coeff);
  214.                     MasterScript.on_translation = pos.add(diff);
  215.                 }
  216.             }
  217.         }
  218.         prev_time = value;
  219.         prev_pos = pos;
  220.     }
  221.  
  222.     function stopIt(value)
  223.     {
  224.  
  225.         bStopInProgress = true;
  226.         timerStopTime = anim_timer.cycleTime + anim_timer.cycleInterval;
  227.         stopped = value;
  228.         print('stop It '+value);
  229.     }
  230.  
  231.     function stop(value)
  232.     {
  233.         if (bMove)
  234.         {
  235.             bMove = false;
  236.             bUseTarget = false;
  237.         }
  238.     }
  239.  
  240.     function getPos()
  241.     {
  242.         return new SFVec3f(MasterScript.translation_changed.x,MasterScript.translation_changed.y,MasterScript.translation_changed.z);
  243.     }
  244.  
  245.     function pointToMove(value)
  246.     {
  247.         bUseTarget = true;
  248.         point = value;
  249.         if (bMove)
  250.         target = point;
  251.     }
  252.  
  253.     function start(value)
  254.     {
  255.         if (value>0)
  256.         started = true;
  257.     }
  258.     function startIt(value)
  259.     {
  260.         bStopInProgress = false;
  261.         if (!bMove)
  262.         {
  263.             bMove = true;
  264.             timer.enabled = true;
  265.             prev_time = value;
  266.             prev_pos = getPos();
  267.             started = value;
  268.             bCalculateAnimDist = true;
  269.             anim_cycle = 0;
  270.         }
  271.         if (bMove)
  272.         target = point;
  273.     }
  274.  
  275.     function getOri()
  276.     {
  277.         rot = MasterScript.rotation_changed;
  278.         return ((rot.y>0)?1:-1)*rot.angle;
  279.     }
  280.     
  281.     function normRot(f)
  282.     {
  283.         PIm2 = Math.PI*2;
  284.         while (f > Math.PI)
  285.         f = f-PIm2;
  286.         while (f < -Math.PI)
  287.         f = f+PIm2;
  288.         return f;
  289.     }
  290.  
  291.     function setRotation(rot)
  292.     {
  293.         MasterScript.on_rotation = new SFRotation(0,1,0,rot);
  294.     }
  295.  
  296.     function rotate(pos,dur)
  297.     {  
  298.         m_angSpeed = 3;
  299.         angle60 = Math.PI/3;
  300.  
  301.         azim = getAzimuth(pos,target);
  302.         ori     = getOri();
  303.         angle = azim - ori;
  304.         angle = normRot( angle );
  305.         absAngle = Math.abs(angle);
  306.  
  307.         canRotate = dur * m_angSpeed;
  308.         if( absAngle >= canRotate )
  309.         {
  310.             a = (angle>0)?canRotate:-canRotate;
  311.             if( absAngle >= angle60 )
  312.             a = a * (1 + absAngle - angle60);
  313.             setRotation(a+ori);
  314.         }
  315.         else if( absAngle >= 0.001 )
  316.         {
  317.             setRotation(azim);
  318.         }
  319.     }
  320.     function eventsProcessed()
  321.     {
  322.         if (started && bUseTarget)
  323.         startIt();
  324.         if (started)
  325.         started = false;
  326.     }
  327.     " 
  328.     directOutput TRUE
  329.     field SFNode MasterScript USE MasterScript
  330.     field SFNode timer TimeSensor 
  331.     {
  332.         enabled FALSE
  333.         loop TRUE
  334.     }
  335.     field SFNode self USE MoveScript
  336.     eventIn SFTime start 
  337.     eventIn SFTime stop 
  338.     eventIn SFVec3f pointToMove IS destination_point
  339.     eventOut SFTime stopped IS point_reached
  340.     eventIn SFFloat set_distance 
  341.     eventIn SFTime animate 
  342.     eventIn SFNode set_animTimer 
  343.     field SFNode anim_timer NULL
  344.     field SFBool bUseTarget FALSE
  345.     field SFBool bMove FALSE
  346.     field SFVec3f point 0 0 0 
  347.     field SFVec3f target 0 0 0 
  348.     field SFVec3f prev_pos 0 0 0 
  349.     field SFTime prev_time 0
  350.     field SFFloat anim_dist 0
  351.     field SFTime anim_cycle 0
  352.     field SFTime timerStopTime 0
  353.     field SFBool bCalculateAnimDist FALSE
  354.     field SFBool bStopInProgress FALSE
  355.     field SFBool started FALSE
  356. }
  357. #end_text
  358.  
  359. #ANIMATION ENGINE PROTO
  360. #begin_text
  361. PROTO AnimationEngine [
  362.     exposedField SFTime   cycleInterval 1     
  363.     exposedField SFBool   enabled       TRUE
  364.     exposedField SFBool   loop          TRUE
  365.     eventIn      SFTime   startTime
  366.     eventIn      SFTime   stopTime
  367.     eventOut     SFTime   cycleTime
  368.     eventOut     SFFloat  fraction_changed    
  369.     eventOut     SFBool   isActive
  370.     eventOut     SFTime   time
  371.     eventOut     SFTime   animation_finished
  372.     eventOut     SFTime   animation_started
  373.     
  374.     eventIn         SFTime      realStartTime
  375.     eventOut     SFTime   realStopTime
  376.     eventOut     SFTime   stopOthers
  377.  
  378.     field        SFNode   animationNode NULL
  379.  
  380.     field SFNode moveScript NULL
  381.  
  382.     field SFBool debug FALSE
  383. ]
  384. {
  385.     DEF AnimationTimer TimeSensor {
  386.         cycleInterval IS cycleInterval
  387.         enabled          IS enabled
  388.         loop          IS loop
  389.         cycleTime     IS cycleTime
  390.         isActive      IS isActive
  391.         time          IS time
  392.         startTime -1
  393.     }
  394.     DEF AnimationScript Script {
  395.         directOutput TRUE
  396.         field SFNode timer_node USE AnimationTimer
  397.         field SFNode animation_node IS animationNode
  398.         
  399.         field SFBool play FALSE
  400.         field SFFloat fraction_tmp 1
  401.  
  402.         eventIn SFTime set_startTime IS startTime
  403.         eventIn SFTime set_stopTime IS stopTime
  404.         eventIn SFFloat set_fraction 
  405.  
  406.         eventIn SFTime realStartTime IS realStartTime
  407.         eventOut SFTime   realStopTime IS realStopTime
  408.  
  409.         eventIn    SFBool isActive
  410.         eventOut SFTime   animation_finished IS    animation_finished
  411.         eventOut SFTime   animation_started IS animation_started
  412.         
  413.         eventOut SFTime stopOthers IS stopOthers
  414.  
  415.         field SFNode moveScript IS moveScript
  416.         field SFBool locomotive FALSE
  417.         field SFFloat distance 0
  418.  
  419.         field SFBool finished FALSE
  420.         field SFBool debug IS debug
  421.         field SFBool activated FALSE
  422.         field SFBool loop FALSE
  423.  
  424.         url "javascript:
  425.         function getDistance(node){
  426.             if (node!=null)
  427.             {
  428.                 for(i=0;i<node.connectTo.length;i++)
  429.                 if (node.connectTo[i]=='MASTER.translation')
  430.                 {
  431.                     ip = node.interpolators[i];
  432.                     v1 = ip.keyValue[0];
  433.                     v2 = ip.keyValue[ip.keyValue.length-1];
  434.                     return v1.subtract(v2).length();
  435.                 }
  436.             }
  437.             return 0;
  438.         }
  439.         function initialize(){
  440.             distance = getDistance(animation_node);
  441.             locomotive = distance>0.1;
  442.             activated = false;
  443.             loop = timer_node.loop;
  444.         }
  445.  
  446.         function isActive(value,timestamp){
  447.             activated = value;
  448.             if(value)
  449.             {
  450.                 animation_started = timestamp;
  451.                 timer_node.loop = loop;
  452.             }
  453.             else if(play)
  454.             {
  455.                 play = false;
  456.                 animation_finished = timestamp;
  457.                 finished = true;
  458.             }
  459.         }
  460.         function realStartTime(value){
  461.             if (play)
  462.             {
  463.                 timer_node.loop = true;
  464.                 timer_node.startTime = value;
  465.                 timer_node.stopTime = 0;
  466.                 if (moveScript!=null){
  467.                     moveScript.set_animTimer = timer_node;
  468.                     if (locomotive)
  469.                     {
  470.                         moveScript.start = value;
  471.                         moveScript.set_distance = distance;
  472.                     }
  473.                     else
  474.                     moveScript.stop = value;
  475.                 }
  476.             }
  477.         }
  478.         function set_startTime(value){
  479.             if (play || value<0) return;
  480.             play = true;
  481.             stopOthers = value;
  482.             if (finished)
  483.             {
  484.                 finished = false;
  485.                 realStartTime(value);
  486.             }
  487.         }    
  488.         function set_stopTime(value){
  489.             if (!play)
  490.             {
  491.                 if (finished)
  492.                 {
  493.                     finished = false;
  494.                     realStopTime = value;
  495.                 }
  496.                 return;
  497.             }
  498.             play = false;
  499.             if (timer_node.startTime>value)
  500.             {
  501.                 realStopTime = timer_node.startTime;
  502.                 timer_node.startTime = -1;
  503.             }
  504.             else
  505.             {
  506.                 if( timer_node.cycleTime > 0 )
  507.                 timer_node.stopTime = timer_node.cycleTime+timer_node.cycleInterval;
  508.                 else
  509.                 timer_node.stopTime = timer_node.startTime+timer_node.cycleInterval;
  510.                 realStopTime = timer_node.stopTime;
  511.             }
  512.             if (moveScript!= null && locomotive)
  513.             moveScript.stop = value;
  514.         }    
  515.         function set_fraction(value){
  516.             if (play == false && fraction_tmp > value)
  517.             fraction_tmp = 1;
  518.             else
  519.             fraction_tmp = value;
  520.             if (debug) print(animation_node+':'+value);
  521.         }
  522.         function eventsProcessed(){
  523.             if (activated)    
  524.             animation_node.fractionShift = fraction_tmp;
  525.         }" 
  526.     }
  527.     ROUTE AnimationTimer.fraction_changed TO AnimationScript.set_fraction
  528.     ROUTE AnimationTimer.isActive TO AnimationScript.isActive
  529. }
  530.  
  531. PROTO SequenceEngine [
  532.     exposedField SFTime   cycleInterval 1     
  533.     exposedField SFBool   enabled       TRUE
  534.     exposedField SFBool   loop          TRUE
  535.     eventIn      SFTime   startTime
  536.     eventIn      SFTime   stopTime
  537.     eventOut     SFTime   cycleTime
  538.     eventOut     SFFloat  fraction_changed    
  539.     eventOut     SFBool   isActive
  540.     eventOut     SFTime   time
  541.     eventOut     SFTime   animation_finished
  542.     eventOut     SFTime   animation_started
  543.  
  544.     eventIn         SFTime      realStartTime
  545.     eventOut     SFTime   realStopTime
  546.     eventOut     SFTime   stopOthers
  547.  
  548.     field        SFNode   animationNode NULL
  549.  
  550.     field SFNode moveScript NULL
  551. ]
  552. {
  553.  
  554.     DEF SequenceTimer TimeSensor {
  555.         cycleInterval IS cycleInterval
  556.         enabled          IS enabled
  557.         loop          IS loop
  558.         isActive      IS isActive
  559.         time          IS time
  560.         startTime -1
  561.     }
  562.     DEF SequenceScript Script {
  563.         directOutput TRUE
  564.         field SFNode timer_node USE SequenceTimer
  565.         field SFNode animation_node NULL
  566.         field SFNode sequence_node IS animationNode
  567.         
  568.         field SFBool play FALSE
  569.         field SFFloat fraction_tmp 1
  570.         field SFTime start_time 0
  571.         field SFTime cycle 1
  572.         field SFInt32 anim_cnt 1
  573.         field SFInt32 anim_num 1
  574.  
  575.         eventOut SFTime cycleTime IS cycleTime
  576.         eventIn SFTime set_startTime IS startTime
  577.         eventIn SFTime set_stopTime IS stopTime
  578.         eventIn SFTime set_time
  579.  
  580.         eventIn SFTime realStartTime IS realStartTime
  581.         eventOut SFTime   realStopTime IS realStopTime
  582.  
  583.         eventIn    SFBool isActive
  584.         eventOut SFTime   animation_finished IS    animation_finished
  585.         eventOut SFTime   animation_started IS animation_started
  586.  
  587.         eventOut SFTime stopOthers IS stopOthers
  588.  
  589.         field SFNode moveScript IS moveScript
  590.         field SFBool locomotive FALSE
  591.         field SFBool bStartDoEnd FALSE
  592.         field SFBool finished FALSE
  593.         field MFFloat distance []
  594.         field SFBool activated FALSE
  595.         field SFBool loop FALSE
  596.  
  597.         url "vrmlscript:
  598.  
  599.         function getDistance(node){
  600.             if (node!=null)
  601.             {
  602.                 var i;
  603.                 for(i=0;i<node.connectTo.length;i++)
  604.                 if (node.connectTo[i]=='MASTER.translation')
  605.                 {
  606.                     var ip;
  607.                     var v1;
  608.                     var v2;
  609.                     ip = node.interpolators[i];
  610.                     v1 = ip.keyValue[0];
  611.                     v2 = ip.keyValue[ip.keyValue.length-1];
  612.                     return v1.subtract(v2).length();
  613.                 }
  614.             }
  615.             return 0;
  616.         }
  617.         function initialize()
  618.         {
  619.             anim_cnt = sequence_node.sequence.length;
  620.             var i;
  621.             for(i=0;i<anim_cnt;i++)
  622.             {
  623.                 dist = getDistance(sequence_node.children[sequence_node.sequence[i]]);
  624.                 distance[i] = dist;
  625.                 locomotive = (locomotive) || (dist>0.1);
  626.             }
  627.             bStartDoEnd = sequence_node.start_do_end;
  628.             loop = timer_node.loop;
  629.         }
  630.         function isActive(value,timestamp){
  631.             activated = value;
  632.             if(value)
  633.             {
  634.                 animation_started = timestamp;
  635.                 timer_node.loop = loop;
  636.             }
  637.             else if(play)
  638.             {
  639.                 play = false;
  640.                 animation_finished = timestamp;
  641.                 finished = true;
  642.             }
  643.         }
  644.         function realStartTime(value){
  645.             if (play)
  646.             {
  647.                 anim_num = 0;
  648.                 anim_cnt = sequence_node.sequence.length;
  649.                 animation_node = sequence_node.children[sequence_node.sequence[anim_num]];
  650.                 cycle = 1/animation_node.pitch;
  651.                 start_time = value;
  652.                 timer_node.loop = true;
  653.                 timer_node.startTime = value;
  654.                 timer_node.stopTime = 0;
  655.                 if (moveScript!=null){
  656.                     moveScript.set_animTimer = timer_node;
  657.                     if (locomotive)
  658.                     {
  659.                         moveScript.start = value;
  660.                         moveScript.set_distance = distance[anim_num];
  661.                     }
  662.                     else
  663.                     moveScript.stop = value;
  664.                 }
  665.             }
  666.         }
  667.         function set_startTime(value){
  668.             if (play || value<0) return;
  669.             play = true;
  670.             stopOthers = value;
  671.             if (finished)
  672.             {
  673.                 finished = false;
  674.                 realStartTime(value);
  675.             }
  676.         }    
  677.         function set_stopTime(value){
  678.             if (!play)
  679.             {
  680.                 if (finished)
  681.                 {
  682.                     finished = false;
  683.                     realStopTime = value;
  684.                 }
  685.                 return;
  686.             }
  687.             play = false;
  688.             if (timer_node.startTime>value)
  689.             {
  690.                 realStopTime = timer_node.startTime;
  691.                 timer_node.startTime = -1;
  692.             }
  693.             else
  694.             {
  695.                 var timerStopTime = start_time+cycle;
  696.                 var i;
  697.                 if (bStartDoEnd)
  698.                 for (i=anim_num+1;i<anim_cnt;i++)
  699.                 {
  700.                     var node = sequence_node.children[sequence_node.sequence[i]];
  701.                     var c = 1/node.pitch;
  702.                     timerStopTime = timerStopTime + c;
  703.                 }
  704.                 timer_node.stopTime = timerStopTime;
  705.                 realStopTime = timerStopTime;
  706.             }
  707.             if (moveScript!= null && locomotive)
  708.             moveScript.stop = value;
  709.         }    
  710.         function set_time(value){
  711.             fraction_tmp = (value-start_time)/cycle;
  712.             if (fraction_tmp > 1){
  713.                 start_time = value;
  714.                 anim_num = anim_num + 1;
  715.                 if (anim_num >= anim_cnt-1 && bStartDoEnd && play)    anim_num = 1;
  716.                 animation_node = sequence_node.children[sequence_node.sequence[anim_num]];
  717.                 cycle = 1/animation_node.pitch;
  718.                 timer_node.cycleInterval = cycle;
  719.                 fraction_tmp = (value-start_time)/cycle;
  720.                 cycleTime = start_time;
  721.                 if (moveScript!=null && locomotive)
  722.                 moveScript.set_distance = distance[anim_num];
  723.                 if (anim_num >= anim_cnt-1 && !bStartDoEnd)
  724.                 timer_node.stopTime = start_time+cycle;
  725.             }
  726.         }
  727.         function eventsProcessed(){
  728.             if (activated)    
  729.             animation_node.fractionShift = fraction_tmp;
  730.         }" 
  731.     }
  732.     ROUTE SequenceTimer.time TO SequenceScript.set_time
  733.     ROUTE SequenceTimer.isActive TO SequenceScript.isActive
  734. }
  735. #end_text
  736.